/**
 * 无重复字符串的排列组合。
 * 编写一种方法，计算某字符串的所有排列组合，字符串每个字符均不相同。
 * 示例 1:
 * 输入：S = "qwe" 输出：["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
 * 
 * 思路：其实是个深度二叉树遍历问题，可以用回溯算法
 */
const func = function (s) {
    const set = new Set();
    const visited = {};
    const len = s.length;
    function backtrack(path) {
        if (path.length === len) { // 满足条件，结束
            return set.add(path);
        }
        for (let i = 0; i < len; i++) {
            if (visited[i]) {
                continue;
            }
            visited[i] = true; // 做选择
            backtrack(path + s[i]);
            visited[i] = false; // 撤销选择
        }
    }
    backtrack('');
    return [...set];
};

console.log(func('qwe'));